Sesión 1 - Entrando al mundo de R

Taller introductorio a R

Benjamín Adasme

2025-10-27

Presentación

  • Sociólogo egresado de la UCM en 2019
  • Dedicado al análisis de datos cuantitativos desde 2021
  • Formación certificada en R y Rstudio
  • Nerd de R y la estadística

Quien les habla

Objetivo general

Introducir R en personas que analicen datos cuantitativos sin lenguajes de programación.

Específicos

  • Conocer la utilidad de R y las herramientas básicas de R base
  • Conocer tidyverse, para limpieza, manipulación y exploración de datos
  • Repasar estadísticas descriptiva (uni y multivariada) e inferencial.
  • Conocer las herramientas de creación de gráficos en R, específicamente ggplot2 y la gramática de gráficos.
  • Conocer herramientas de presentación de datos como Quarto para la difusión y divulgación.

Breve historia

Comienza su desarrollo en 1993 la U de Auckland. En 1997 sale a la luz en su versión definitiva. Ese mismo año se crea el CRAN que alberga los paquetes y se une al Proyecto GNU de software libre.

Actualmente el desarrollo depende del R Development Core Team.

En 2011 se publica la primera versión de Rstudio, la IDE más popular para trabajar con R.

¿Por qué usar R?

  • Replicabilidad
  • Eficiencia
  • Control

R vs el mundo

Comparación de herramientas computacionales estadísticas
Dimensión / Lenguaje R Python SPSS Excel Stata
Alcance General, orientación multidisciplinar General, orientación multidisciplinar Limitado, orientado a Ciencias Sociales Limitado, orientado a administración Limitado, orientado a Economía
Licencia Libre (freeware) Libre (freeware) Pagada (versión de prueba limitada) Pagada (versión de prueba limitada) Pagada (versión de prueba limitada)
Aprendizaje Sintaxis, poco intuititvo Sintaxis, poco intuititvo Botones y sintaxis, intuitivo Botones y sintaxis, intuitivo Botones y sintaxis, intuitivo
Visualización Avanzada Intermedia Básica Intermedia Intermedia
Análisis de texto Intermedio, poca eficiencia Avanzado, amplia eficiencia No No No
Minería Datos Intermedio, poca eficiencia Avanzado, amplia eficiencia No No No
Sistema operativo Windows, Mac OS, Linux Windows, Mac OS, Linux Windows, Mac OS Windows, Mac OS Windows, Mac OS
Fuente: Boccardo Bosoni y Ruiz Bruzzone, 2019

Una curva de aprendizaje

Mis expectativas

  • Respeto mutuo y buen trato
  • Disposición al aprendizaje y motivación
  • Espíritu colaborativo y no competitivo
  • Curiosidad
  • Tolerancia a la frustración y al error

Sesión 1

¿Qué es R?

  • Lenguaje de programación.
  • No hay botones para hacer las cosas
  • El usuario debe dar las “instrucciones por escrito”
  • Hay más de una forma de hacer las cosas

Nosotres programando en R por 15 minutos

Vamos a R

Vamos a Rstudio

Interfaz de Rstudio

Elementos de Rstudio

  • Consola: inferior izquierda. R puro y duro, donde aparecen los resultados.
  • Editor de código: superior izquierda. Donde escribiremos el código de R y otros lenguajes.
  • Ambiente: superior derecha. Almacén de objetos guardados
  • Visor: inferior derecha. Visor de archivos, gráficos, paquetes, ayuda, entre otros.

Rstudio es como cocinar

  • El código escrito en la sección fuente es nuestra receta
  • La consola es la olla donde se cocinan los alimentos, de donde salen resultados.
  • Los alimentos preparados se albergan en el ambiente, disponibles para que se usen en otra preparación.
  • Algunas preparaciones tienen un emplatado especial, y aparecen como imagenes en nuestra pestaña de gráficos.
  • Los archivos son nuestra despensa, los paquetes nuestros implementos de cocina.

Rstudio es como comer una naranja

Ya cómete la maldita naranja

Hasta ahora hemos usado R como

  • Calculadora

  • Operador lógico

Operadores lógicos

¿Había una imagen con peor calidad?

Sintaxis básica

objeto <- función(arg1, arg2, ...)

objeto1 = 2 + 2

¿Cual es el valor de objeto1?

objeto1
[1] 4

Importante que al usar el asignador <- ambas partes deben quedar unidas. Usar < - con un espacio entremedio no sirve para asignar.

Al asignar nombres a objetos debemos considerar que:

  • R es sensible a las mayúsculas y minúsculas. f =/= F
  • No pueden comenzar con números
  • No deben contener espacios. Se debe usar _ como separador

Otro ejemplo

division <- 43 / 8

division
[1] 5.375

Importante

El punto sirve para indicar decimal, la coma para enumerar elementos. El uso de coma para indicar un decimal en el código generará errores.

Otro otro ejemplo

frutas <- c("manzana", "pera", "naranja")

En este caso la , sirve para enumerar elementos.

Un pequeño detalle

En el código

frutas <- c("manzana", "pera", "naranja")

Hay una función que no conocemos…

La función c() sirve para combinar elementos en uno solo, creando…

Vectores (que veremos más adelante)

Clases de objetos en R

  • Doble/flotante (numeric o double): número con decimales (4.5 , 6.0009)
  • Entero (integer): número entero sin decimales (120, 2L)
  • Cadena (character): texto. Se indica usando comillas ("texto", "lápiz", "23")
  • Lógico (logical): predeterminados. Definen operaciones lógicas (TRUE, FALSE, NA, NULL)
  • Factor (factor): cadenas con un nivel determinado. Útil para variables categóricas.

La función class() nos indica la clase de un objeto Las funciones is.[tipo] son pruebas que definen si un objeto cumple o no con una condición.

x = 8

is.numeric(x)
[1] TRUE
is.character(x)
[1] FALSE

Veamos algunos ejemplos en R

Factores

genero <- c(1, 3, 2, 3, 1, 2, 2, 3)

genero_fact <- factor(genero, labels = c("Masc", "Fem", "NoBin"))

genero_fact
[1] Masc  NoBin Fem   NoBin Masc  Fem   Fem   NoBin
Levels: Masc Fem NoBin

Nota

Al llamar la variable de factor no nos imprime los números, sino que las etiquetas que hemos asignado. Para conocer los niveles asociados podemos usar la función levels()

Pregunta

¿A y B son iguales? ¿Son diferentes? ¿Por qué?

A <- 34

B <- "34"

La respuesta, en teoría es NO, pero …

A == B
[1] TRUE

¿Por qué sucede?

Al comparar dos vectores de un solo elemento, R modifica automáticamente uno de los dos a la clase del otro. En este caso, al comparar A igual a B, R transforma B en numérico. Por ello, son iguales.

Estructuras de datos

Vector

  • Conjunto de elementos del mismo tipo
  • Pueden ser “llamados” por un nombre arbitrario
  • Ese nombre representa los valores que contiene en cualquier otro lugar
  • Se alberga en el ambiente como cualquier objeto
  • Se componen principalmente con la función c() que puede significar “combinar” o concatenar”

Los vectores se pueden seleccionar con los corchetes [ ]

vec1 <- seq(0, 10, by = 2) #secuencia numérica

vec1
[1]  0  2  4  6  8 10
vec1[1]
[1] 0
vec1[2:3]
[1] 2 4
vec1[vec1 >= 6]
[1]  6  8 10

Lista

  • Estructura que permite agrupar diversos tipos de datos en un solo objeto.
  • Se crean con la función list()
  • Poco usado pero útil con algunas funciones
lista1 <- list(nombre = "Juan",
               edad = 35,
               intereses = "estadística", "deportes", "música")


lista1["nombre"]
$nombre
[1] "Juan"

Matriz

  • Arreglo de números con una dimensión definida en filas y columnas
  • Útil en matemáticas
  • Base para el siguiente tipo de estructura
matrix(1:6, nrow = 3, ncol = 2)
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

Data frame

  • El tipo de objeto más común en R.
  • Datos en formato tabla. Contiene filas y columnas.
  • Las columnas son vectores. Las filas son observaciones
  • Las columnas, por tanto, pueden ser de diferente tipo o clase entre ellas, pero del mismo tipo internamente.

df <- data.frame(var1 = 1:4,
                 var2 = c("a", "b", "c", NA),
                 otro_nom = c(TRUE, TRUE, FALSE, TRUE))

rmarkdown::paged_table(df)

Los data frame también se pueden dividir con los corchetes [ ]

Dentro del corchete el primer número representa las filas y el segundo las columnas.

Seleccionamos toda la fila 1. Al dejar vacío después de la coma indicamos que queremos todas las columnas.

df[1,]  
  var1 var2 otro_nom
1    1    a     TRUE

Seleccionamos toda la columna 3. Al dejar vacío el número antes de la coma, indicamos todas las filas.

df[,3]  
[1]  TRUE  TRUE FALSE  TRUE

Seleccionamos la fila 4 y la columna 2

df[4,2] 
[1] NA

También podemos seleccionar las variables de un data frame utilizando el signo $

df$var1
[1] 1 2 3 4

O utilizando un doble corchete

df[["otro_nom"]]
[1]  TRUE  TRUE FALSE  TRUE

Nota

Al usar $ o [[ ]] el botón Tab nos mostrará las variables disponibles.

Tibble

  • Evolución del data frame, pero en el tidyverse (contenido de la próxima sesión)

Apliquemos lo aprendido

Funciones básicas

Funciones base vs funciones de paquetes

R como lenguaje se compone de diferentes paquetes. El principal es el paquete “base” que contiene la mayoría de las funciones elementales de R

Más adelante aprenderemos a cargar nuevos paquetes y sumar nuevas funciones.

Funciones para manejar vectores

y <- c(23, 42, -23, 0, 50, -4, 0)

sort(y) #ordena vectores
[1] -23  -4   0   0  23  42  50
rev(y) #Invierte el orden del vector
[1]   0  -4  50   0 -23  42  23

z = c("mesa", "silla", "mesa", "plato", "plato")

table(z) #Frecuencias de elementos
z
 mesa plato silla 
    2     2     1 
unique(z) #Valores únicos del vector
[1] "mesa"  "silla" "plato"
length(z) #Cantidad de elementos del vector
[1] 5

Funciones matemáticas básicas

sum(y) #Suma de los elementos
[1] 88
#Mínimo y máximo del vector
min(y)
[1] -23
max(y)
[1] 50

round(4.7863834345, 3)
[1] 4.786
sqrt(64)
[1] 8
log(100, base = 10)
[1] 2

Funciones estadísticas básicas

Promedio o media:

mean(y)
[1] 12.57143

Mediana

median(y)
[1] 0

Varianza

var(y)
[1] 705.2857

Desviación típica o estándar

sd(y)
[1] 26.55722

Cuantiles de una distribución numerica

quantile(y)
   0%   25%   50%   75%  100% 
-23.0  -2.0   0.0  32.5  50.0 

Correlación (Pearson)

t <- c(6, 7, 1, 3, 9, 1, 1)

cor(t, y)
[1] 0.9517828

Correlación de Spearman

cor(t,y, 
    method = "spearman")
[1] 0.934947

Generar una distribución normal aleatoria

set.seed(123)

rnorm(30)
 [1] -0.56047565 -0.23017749  1.55870831  0.07050839  0.12928774  1.71506499
 [7]  0.46091621 -1.26506123 -0.68685285 -0.44566197  1.22408180  0.35981383
[13]  0.40077145  0.11068272 -0.55584113  1.78691314  0.49785048 -1.96661716
[19]  0.70135590 -0.47279141 -1.06782371 -0.21797491 -1.02600445 -0.72889123
[25] -0.62503927 -1.68669331  0.83778704  0.15337312 -1.13813694  1.25381492

hist(rnorm(30))

Funciones de data frame

Permiten conocer las dimensiones de un data frame

nrow(df)
[1] 4
ncol(df)
[1] 3
dim(df)
[1] 4 3

cbind() une vectores a un data frame

vec2 <- c(0, 0, 1, 1)

cbind(df, vec2)
  var1 var2 otro_nom vec2
1    1    a     TRUE    0
2    2    b     TRUE    0
3    3    c    FALSE    1
4    4 <NA>     TRUE    1

rbind() une una fila de un data frame a otro. Para ello ambos objetos deben tener los mismos nombres de variables y del mismo tipo o clase

df_2 <- data.frame(var1 = 5,
                   var2 = "e",
                   otro_nom = FALSE)


rbind(df, df_2)
  var1 var2 otro_nom
1    1    a     TRUE
2    2    b     TRUE
3    3    c    FALSE
4    4 <NA>     TRUE
5    5    e    FALSE

La función head() nos permite ver las primeras 6 filas de un data frame. Útil para explorar

head(mtcars[,1:10])
                   mpg cyl disp  hp drat    wt  qsec vs am gear
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3

La función View() nos permite ver un data frame en otra pestaña de Rstudio

Desafío sesión 1

Primer desafío del curso

  1. Crear 5 vectores, uno correspondiente cada clase de objetos que revisamos, y guardarlos por separado. Deben tener una longitud mínima de 6 elementos. El nombre de cada objeto debe indicar su clase (ej. vector_numero, obj_log, vcadena, etc. )

  2. Usar la función class() para comprobar la clase de los 5 vectores.

  3. Crear un data frame con los 5 vectores. Calcular las dimensiones del data frame y usar tres funciones estadísticas en alguna de sus variables numéricas.

Resumen del día

¿Qué aprendimos?

Cierre 1: configurando Rstudio

Cierre 2: material complementario

Cheatsheet de R base